home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -screenplay- / shareware / stowers / stowers.amos / stowers.amosSourceCode < prev    next >
AMOS Source Code  |  1997-12-01  |  11KB  |  410 lines

  1. Dim POLE(8,8),XOLD(2),YOLD(2)
  2. Global POLE(),X,Y,PL,ER,XOLD(),YOLD(),P1,P2,PLACOM,KOM$,MTAH
  3. Track Loop On 
  4. 'Track Load "Music.mod",1
  5. Proc INIT
  6. Do 
  7.    Proc UVOD
  8.    For TAH=1 To MTAH
  9.       For PL=1 To 2
  10.          If PL=2 and PLACOM
  11.             Hide On 
  12.             KOM$="BLUE player turn...  Amiga moves!" : Proc KOM
  13.             Proc VYBERSICOM
  14.          Else 
  15.             If PL=1
  16.                KOM$="RED player turn...       "+Str$(MTAH-TAH+1)+" turns to go."
  17.             Else 
  18.                KOM$="BLUE player turn...      "+Str$(MTAH-TAH+1)+" turns to go."
  19.             End If 
  20.             Proc KOM
  21.             Proc VYBERSI
  22.          End If 
  23.          Proc ZAPISMAPU
  24.          Proc SKORE
  25.          Show On 
  26.       Next PL
  27.    Next TAH
  28.    Proc VYSLEDKY
  29. Loop 
  30.  
  31. Procedure INIT
  32.    Hide On : Colour 1,$0
  33.    Curs Off : Flash Off 
  34.    Text 80,120,"Loading STONE TOWERS"
  35.    Screen Open 2,640,256,16,Hires : Screen Hide 2 : Curs Off : Flash Off 
  36.    Load Iff "STOWERS.DAT1",2
  37.    Screen Open 3,320,256,32,Lowres : Screen Hide 3 : Curs Off : Flash Off 
  38.    Track Play 1
  39.    Screen Show 2 : Screen Close 0
  40.    Load Iff "STOWERS.DAT2",3 : Screen Hide 3
  41.    T=Timer+250
  42.    Repeat 
  43.    Until(T<Timer) or Mouse Key
  44.    Screen Show 3 : Screen Hide 2
  45.    Screen Close 2
  46.    Screen Open 1,640,256,16,Hires
  47.    Screen Hide 1
  48.    Curs Off : Flash Off 
  49.    Limit Mouse 
  50.    Limit Mouse 129,43 To 399,275
  51.    'Load "STONESOUND.ABK" 
  52.    Proc CTIBLOKY
  53.    T=Timer+250
  54.    Repeat 
  55.    Until(T<Timer) or Mouse Key
  56.    Screen Show 1
  57.    Screen Close 3
  58.    
  59. End Proc
  60. Procedure VYBERSI
  61.    
  62.    Flash Off 
  63.    If PL=1
  64.       Flash 15,"(500,5)(a00,5)(f00,5)(a00,5)"
  65.    Else 
  66.       Flash 15,"(225,5)(55a,5)(55f,5)(55a,5)"
  67.    End If 
  68.    X Mouse=X Hard(XOLD(PL))
  69.    Y Mouse=Y Hard(YOLD(PL))
  70.    X=0 : Y=0
  71.    Repeat 
  72.       Repeat 
  73.          XI=X Screen(X Mouse) : YI=Y Screen(Y Mouse)
  74.          XOLD(PL)=XI : YOLD(PL)=YI
  75.          XI=XI/80+1 : YI=YI/35+1
  76.          If XI>7 or YI>7 or XI<1 or YI<1
  77.             XI=X : YI=Y
  78.          End If 
  79.          
  80.          If Not(X=XI and Y=YI)
  81.             Ink 1 : Box(X-1)*80,(Y-1)*35 To X*80,Y*35
  82.             Ink 15 : Box(XI-1)*80,(YI-1)*35 To XI*80,YI*35
  83.             X=XI : Y=YI
  84.             
  85.             ER=False
  86.             If POLE(X,Y)>0 and PL=2 : ER=True : End If 
  87.             If POLE(X,Y)=-4 and PL=2 : ER=True : End If 
  88.             If POLE(X,Y)<0 and PL=1 : ER=True : End If 
  89.             If POLE(X,Y)=4 and PL=1 : ER=True : End If 
  90.          End If 
  91.          
  92.       Until Mouse Key
  93.       MK= Not ER
  94.       If ER
  95.          Sam Stop 3 : Sam Play 3,6 : Wait 100
  96.       End If 
  97.    Until MK
  98.    
  99.    Hide On 
  100.    For I=1 To 3
  101.       Ink 15 : Box(X-1)*80,(Y-1)*35 To X*80,Y*35 : Wait 2
  102.       Ink 15 : Box(X-1)*80+1,(Y-1)*35+1 To X*80-1,Y*35-1 : Wait 2
  103.       Ink 15 : Box(X-1)*80+2,(Y-1)*35+2 To X*80-2,Y*35-2 : Wait 2
  104.       Ink 1 : Box(X-1)*80,(Y-1)*35 To X*80,Y*35 : Wait 2
  105.       Ink 1 : Box(X-1)*80+1,(Y-1)*35+1 To X*80-1,Y*35-1 : Wait 2
  106.       Ink 1 : Box(X-1)*80+2,(Y-1)*35+2 To X*80-2,Y*35-2 : Wait 2
  107.       
  108.    Next I
  109.    Show On 
  110. End Proc
  111. Procedure ZAPISMAPU
  112.    If PL=1
  113.       If POLE(X,Y)>0
  114.          Inc POLE(X,Y)
  115.       Else 
  116.          POLE(X,Y)=2
  117.       End If 
  118.       Proc DEJHRAD
  119.       If Y>1 and POLE(X,Y-1)=0 : POLE(X,Y-1)=1 : Dec Y : Proc DEJHRAD : Inc Y : End If 
  120.       If Y<7 and POLE(X,Y+1)=0 : POLE(X,Y+1)=1 : Inc Y : Proc DEJHRAD : Dec Y : End If 
  121.       If X>1 and POLE(X-1,Y)=0 : POLE(X-1,Y)=1 : Dec X : Proc DEJHRAD : Inc X : End If 
  122.       If X<7 and POLE(X+1,Y)=0 : POLE(X+1,Y)=1 : Inc X : Proc DEJHRAD : Dec X : End If 
  123.       
  124.    End If 
  125.    
  126.    If PL=2
  127.       If POLE(X,Y)<0
  128.          Dec POLE(X,Y)
  129.       Else 
  130.          POLE(X,Y)=-2
  131.       End If 
  132.       Proc DEJHRAD
  133.       If Y>1 and POLE(X,Y-1)=0 : POLE(X,Y-1)=-1 : Dec Y : Proc DEJHRAD : Inc Y : End If 
  134.       If Y<7 and POLE(X,Y+1)=0 : POLE(X,Y+1)=-1 : Inc Y : Proc DEJHRAD : Dec Y : End If 
  135.       If X>1 and POLE(X-1,Y)=0 : POLE(X-1,Y)=-1 : Dec X : Proc DEJHRAD : Inc X : End If 
  136.       If X<7 and POLE(X+1,Y)=0 : POLE(X+1,Y)=-1 : Inc X : Proc DEJHRAD : Dec X : End If 
  137.    End If 
  138.    
  139.    Repeat 
  140.       ER=False
  141.       For X=1 To 7 : For Y=1 To 7
  142.             S=POLE(X,Y)-Sgn(POLE(X,Y))
  143.             S=S+POLE(X-1,Y)-Sgn(POLE(X-1,Y))
  144.             S=S+POLE(X+1,Y)-Sgn(POLE(X+1,Y))
  145.             S=S+POLE(X,Y-1)-Sgn(POLE(X,Y-1))
  146.             S=S+POLE(X,Y+1)-Sgn(POLE(X,Y+1))
  147.             
  148.             If PL=1
  149.                If S>0 and POLE(X,Y)<0
  150.                   ZBORHRAD
  151.                   POLE(X,Y)=1 : ER=True
  152.                   DEJHRAD
  153.                End If 
  154.             Else 
  155.                If S<0 and POLE(X,Y)>0
  156.                   ZBORHRAD
  157.                   POLE(X,Y)=-1 : ER=True
  158.                   DEJHRAD
  159.                End If 
  160.             End If 
  161.       Next Y : Next X
  162.    Until Not ER
  163.    
  164. End Proc
  165. Procedure SKORE
  166.    P1=0 : P2=0
  167.    For X1=1 To 7 : For Y1=1 To 7
  168.          If Sgn(POLE(X1,Y1))>0
  169.             Inc P1
  170.          End If 
  171.          If Sgn(POLE(X1,Y1))<0
  172.             Inc P2
  173.          End If 
  174.    Next Y1 : Next X1
  175.    Put Block 27,560,0
  176.    Ink 2,9 : Text 600,106,Str$(P1)
  177.    Ink 2,10 : Text 580,122,Str$(P2)
  178.    Ink 4
  179.    If P1>3
  180.       Bar 595,240-P1*2+3 To 600,240
  181.    End If 
  182.    If P2>3
  183.       Bar 630,240-P2*2+3 To 635,240
  184.    End If 
  185.    If P1>0
  186.       Ink 9
  187.       Bar 570,240-P1*2 To 595,240
  188.    End If 
  189.    If P2>0
  190.       Ink 10
  191.       Bar 605,240-P2*2 To 630,240
  192.    End If 
  193.    
  194. End Proc
  195. Procedure VYBERSICOM
  196.    Z2=-100 : ER=True
  197.    Flash 15,"(225,5)(55a,5)(55f,5)(55a,5)"
  198.    
  199.    For X1=7 To 1 Step -1
  200.       For Y1=7 To 1 Step -1
  201.          If POLE(X1,Y1)>-4 and POLE(X1,Y1)<1
  202.             Z1=Sgn(POLE(X1,Y1)) : ER=False
  203.             If X1>1 : Add Z1,Sgn(POLE(X1-1,Y1)) : End If 
  204.             If X1<7 : Add Z1,Sgn(POLE(X1+1,Y1)) : End If 
  205.             If Y1>1 : Add Z1,Sgn(POLE(X1,Y1-1)) : End If 
  206.             If Y1<7 : Add Z1,Sgn(POLE(X1,Y1+1)) : End If 
  207.             Z3=Sgn(POLE(X1,Y1)-1)
  208.             If X1>1 : Add Z3,Sgn(POLE(X1-1,Y1)-1) : End If 
  209.             If X1<7 : Add Z3,Sgn(POLE(X1+1,Y1)-1) : End If 
  210.             If Y1>1 : Add Z3,Sgn(POLE(X1,Y1-1)-1) : End If 
  211.             If Y1<7 : Add Z3,Sgn(POLE(X1,Y1+1)-1) : End If 
  212.             Add Z1,-Z3
  213.             
  214.             If Z1>Z2
  215.                X=X1 : Y=Y1 : Z2=Z1
  216.             End If 
  217.          End If 
  218.          
  219.       Next Y1
  220.    Next X1
  221.    
  222.    If POLE(X,Y)>0 or POLE(X,Y)=-4
  223.       X=0 : Y=1
  224.       Repeat 
  225.          Inc X
  226.          If X>7
  227.             X=1 : Inc Y
  228.          End If 
  229.       Until(POLE(X,Y)<1 and POLE(X,Y)>-4)
  230.    End If 
  231.    
  232.    For I=1 To 3
  233.       Ink 15 : Box(X-1)*80,(Y-1)*35 To X*80,Y*35 : Wait 2
  234.       Ink 15 : Box(X-1)*80+1,(Y-1)*35+1 To X*80-1,Y*35-1 : Wait 2
  235.       Ink 15 : Box(X-1)*80+2,(Y-1)*35+2 To X*80-2,Y*35-2 : Wait 2
  236.       Ink 1 : Box(X-1)*80,(Y-1)*35 To X*80,Y*35 : Wait 2
  237.       Ink 1 : Box(X-1)*80+1,(Y-1)*35+1 To X*80-1,Y*35-1 : Wait 2
  238.       Ink 1 : Box(X-1)*80+2,(Y-1)*35+2 To X*80-2,Y*35-2 : Wait 2
  239.       
  240.    Next I
  241. End Proc
  242. Procedure CTIBLOKY
  243.    Load Iff "STOWERS.DAT3"
  244.    I=0
  245.    
  246.    For Y1=0 To 217 Step 36
  247.       For X1=0 To 200 Step 80
  248.          Inc I
  249.          Get Block I,X1,Y1,80,35
  250.       Next X1
  251.    Next Y1
  252.    Get Block 22,240,0,80,35
  253.    Get Block 23,240,35,80,35
  254.    Get Block 24,320,0,240,35
  255.    Get Block 25,320,36,240,35
  256.    Get Block 26,240,73,320,179
  257.    Get Block 27,560,0,80,246
  258.    Cls 1
  259.    Put Block 27,560,0
  260. End Proc
  261. Procedure DEJHRAD
  262.    X1=80*(X-1)
  263.    Y1=35*(Y-1)
  264.    If POLE(X,Y)=0 : Cls 1,X1,Y1 To X1+80,Y1+35 : End If 
  265.    If POLE(X,Y)=1 : Put Block 22,X1,Y1 : Sam Stop 3 : Sam Play 3,1 : End If 
  266.    If POLE(X,Y)=2 : Put Block 3,X1,Y1 : Sam Stop 3 : Sam Play 3,2 : Wait 64 : End If 
  267.    If POLE(X,Y)=3 : Put Block 2,X1,Y1 : Sam Stop 3 : Sam Play 3,3 : Wait 64 : End If 
  268.    If POLE(X,Y)=4 : Put Block 1,X1,Y1 : Sam Stop 3 : Sam Play 3,4 : Wait 64 : End If 
  269.    If POLE(X,Y)=-1 : Put Block 23,X1,Y1 : Sam Stop 3 : Sam Play 3,1 : End If 
  270.    If POLE(X,Y)=-2 : Put Block 6,X1,Y1 : Sam Stop 3 : Sam Play 3,2 : Wait 64 : End If 
  271.    If POLE(X,Y)=-3 : Put Block 5,X1,Y1 : Sam Stop 3 : Sam Play 3,3 : Wait 64 : End If 
  272.    If POLE(X,Y)=-4 : Put Block 4,X1,Y1 : Sam Stop 3 : Sam Play 3,4 : Wait 64 : End If 
  273.    Wait 20
  274. End Proc
  275. Procedure ZBORHRAD
  276.    KOM$=""
  277.    If POLE(X,Y)>1
  278.       KOM$="Red castle fell to ruins!"
  279.    End If 
  280.    If POLE(X,Y)<-1
  281.       KOM$="Blue castle fell to ruins!"
  282.    End If 
  283.    Proc KOM
  284.    DC=Abs(POLE(X,Y))-1
  285.    If DC>0
  286.       Dec DC
  287.       DC=2-DC
  288.       X1=80*(X-1)
  289.       Y1=35*(Y-1)
  290.       Sam Stop 3 : Sam Play 3,8 : Put Block 7+DC,X1,Y1 : Wait 56
  291.       Sam Stop 3 : Sam Play 3,7 : Put Block 10+DC,X1,Y1 : Wait 22
  292.       Sam Stop 3 : Sam Play 3,7 : Put Block 13+DC,X1,Y1 : Wait 22
  293.       Sam Stop 3 : Sam Play 3,7 : Put Block 16+DC,X1,Y1 : Wait 22
  294.       Sam Stop 3 : Sam Play 3,7 : Put Block 19+DC,X1,Y1 : Wait 45
  295.    End If 
  296. End Proc
  297. Procedure UVOD
  298.    For X=0 To 8
  299.       For Y=0 To 8
  300.          POLE(X,Y)=0
  301.       Next Y
  302.    Next X
  303.    
  304.    For PL=1 To 2
  305.       XOLD(PL)=X Hard(300)
  306.       YOLD(PL)=Y Hard(100)
  307.    Next PL
  308.    PL=1
  309.    
  310.    
  311.    Cls 
  312.    Put Block 27,560,0
  313.    Put Block 26,120,35
  314.    Wait 25
  315.    X Mouse=130 : Y Mouse=50
  316.    Show On 
  317.    KOM$="Select ONE or TWO player game!" : Proc KOM
  318.    
  319.    Repeat 
  320.       ER=True
  321.       Repeat 
  322.       Until Mouse Key
  323.       If X Mouse>210 and X Mouse<324
  324.          If Y Mouse>200 and Y Mouse<218 : PLACOM=False : ER=False : End If 
  325.          If Y Mouse>223 and Y Mouse<242 : PLACOM=True : ER=False : End If 
  326.       End If 
  327.    Until ER=False
  328.    Track Stop : Led On 
  329.    Sam Stop 3 : Sam Play 3,5
  330.    Cls 
  331.    Put Block 27,560,0
  332.    Put Block 24,160,35
  333.    Put Block 24,160,105
  334.    Put Block 24,160,175
  335.    Ink 2,12
  336.    Text 240,50,"SHORT GAME"
  337.    Text 240,120,"MEDIUM GAME"
  338.    Text 240,190,"LONG GAME"
  339.    Ink 13,12
  340.    Text 240,60,"(15 turns)"
  341.    Text 240,130,"(27 turns)"
  342.    Text 240,200,"(40 turns)"
  343.    Wait 25
  344.    KOM$="Select number of turns." : Proc KOM
  345.    MTAH=10
  346.    Repeat 
  347.    Until Mouse Key
  348.    Sam Stop 3 : Sam Play 3,5
  349.    MTAH=27
  350.    If Y Screen(Y Mouse)<88 : MTAH=15 : End If 
  351.    If Y Screen(Y Mouse)>158 : MTAH=40 : End If 
  352.    Cls 
  353.    Put Block 27,560,0
  354.    Wait 50
  355. End Proc
  356. Procedure KOM
  357.    If KOM$=""
  358.       Ink 1,1
  359.       KOM$=Space$(80)
  360.    Else 
  361.       Ink 2,11
  362.       If Left$(KOM$,3)="RED"
  363.          Ink 2,9
  364.       End If 
  365.       If Left$(KOM$,4)="BLUE"
  366.          Ink 2,10
  367.       End If 
  368.       If Left$(KOM$,1)="*"
  369.          Ink 0,2
  370.       End If 
  371.       KOM$=Space$(20)+KOM$+Space$(60-Len(KOM$))
  372.    End If 
  373.    Text 0,254,KOM$
  374. End Proc
  375. Procedure VYSLEDKY
  376.    Hide On 
  377.    KOM$="" : Proc KOM
  378.    Put Block 25,160,105
  379.    Ink 0,2
  380.    Text 240,120,"GAME OVER"
  381.    Sam Stop 3 : Sam Play 3,8
  382.    Wait 40
  383.    If P1<>P2
  384.       Text 200,130,"And the winner is..."
  385.       Sam Stop 3 : Sam Play 3,8
  386.       Wait 40
  387.       Put Block 25,160,150
  388.       If P1>P2
  389.          Text 240,170,"RED KNIGHT!"
  390.          Sam Stop 3 : Sam Play 3,8
  391.          Wait 40
  392.          KOM$="RED KNIGHT WINS! Press mouse to continue." : Proc KOM
  393.       Else 
  394.          Text 232,170,"BLUE KNIGHT!"
  395.          Sam Stop 3 : Sam Play 3,8
  396.          Wait 40
  397.          KOM$="BLUE KNIGHT WINS! Press mouse to continue." : Proc KOM
  398.       End If 
  399.       Sam Stop 3 : Sam Play 3,4 : Wait 200
  400.    Else 
  401.       Text 236,130,"++ DRAW ++"
  402.       Sam Stop 3 : Sam Play 3,8 : Wait 30
  403.       Sam Stop 3 : Sam Play 3,8 : Wait 30
  404.       Sam Stop 3 : Sam Play 3,8 : Wait 30
  405.       KOM$="No one wins. Press mouse to continue." : Proc KOM
  406.    End If 
  407.    Repeat 
  408.    Until Mouse Key
  409.    Track Play 1
  410. End Proc